Telegram Group Search
Зачем [[nodiscard]] нужен не только для возврата значения

Если ты думаешь, что [[nodiscard]] — это просто защита от игнора Result, то вот фокус: его можно вешать и на классы, и на функции, и даже на enum — и это реально помогает избежать багов.

Пример:


struct [[nodiscard]] Error {
std::string message;
};

Error do_something() {
return {"Что-то пошло не так"};
}

void foo() {
do_something(); // warning: ignoring return value of nodiscard type
}


А теперь магия с методами:


struct Connection {
[[nodiscard]] bool is_valid() const {
return valid_;
}

private:
bool valid_ = false;
};

void check_connection(const Connection& conn) {
conn.is_valid(); // warning: result of 'is_valid' is unused
}


📌 Даже если функция возвращает bool — компилятор предупредит, если ты его проигнорируешь. Это круто, когда метод что-то проверяет, ищет или сигналит об ошибке — и ты точно не хочешь забыть проверить результат.

⚠️ Но аккуратно: [[nodiscard]] не бросает исключения и не делает функцию безопасной. Это подсказка компилятору и твой напарник по коду.

Если хочешь писать более надёжный и самодокументируемый код — юзай [[nodiscard]] не только по дефолту, а осознанно.

➡️ @cpp_geek
2025/06/18 15:27:34
Back to Top
HTML Embed Code: